From 84ece8779ed040dd2008f21a4aacdf814ef12131 Mon Sep 17 00:00:00 2001 From: parkrrrr Date: Mon, 1 Dec 2003 20:08:39 +0000 Subject: [PATCH] Added hack to remove � through  from most gpx input --- gpsbabel/gpx.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/gpsbabel/gpx.c b/gpsbabel/gpx.c index 89eeb5af4..17e949325 100644 --- a/gpsbabel/gpx.c +++ b/gpsbabel/gpx.c @@ -753,8 +753,41 @@ gpx_read(void) while (!done) { if ( fd ) { - len = fread(buf, 1, sizeof(buf), fd); + len = fread(buf, 1, sizeof(buf)-10, fd); done = feof(fd) || !len; + buf[len] = '\0'; + if ( buf[len-1] == '&' || + buf[len-2]== '&' || + buf[len-3]== '&' || + buf[len-4]== '&' || + buf[len-5]== '&' || + buf[len-6] == '&' ) { + len += fread( buf+len, 1, 6, fd ); + buf[len]='\0'; + } + { + char *badchar = buf; + char *hex="0123456789abcdef"; + badchar = strstr( buf, "&#x" ); + while ( badchar ) { + int val = 0; + char *hexit = badchar+3; + char *semi = strchr( badchar, ';' ); + *semi = '\0'; + while (*hexit) { + val *= 16; + val += strchr( hex, *hexit )-hex; + hexit++; + } + if ( val < 32 ) { + warning( MYNAME ": Ignoring illegal character %s\n", badchar ); + memmove( badchar, semi+1, strlen(semi+1)+1 ); + len -= (semi-badchar)+1; + } + badchar = strstr( badchar+1, "&#x" ); + } + + } result = XML_Parse(psr, buf, len, done); } else if (input_string) { -- 2.30.2